home *** CD-ROM | disk | FTP | other *** search
- /*
- File: HIDEmulation.c
-
- Contains: HID Emulation glue code between the ADB SHIM and the USB Mouse HID Module
-
- Version: xxx put version here xxx
-
- Copyright: © 1998 by Apple Computer, Inc., all rights reserved.
-
- */
-
- #include <Types.h>
- #include <Devices.h>
- #include <DriverServices.h>
- #include <CursorDevices.h>
- #include <USB.h>
-
-
- #include "MouseModule.h"
-
- extern usbMousePBStruct myMousePB;
-
- void USBMouseIn(UInt32 refcon, void * theData)
- {
- #pragma unused (refcon)
-
- USBHIDDataPtr pMouseData;
- static UInt16 oldbuttons = 0;
- UInt16 changedbuttons = 0;
-
- // DebugStr("\pIn USBMouseIn");
- pMouseData = (USBHIDDataPtr)theData;
-
- // Tell the Cursor Device Manager that we moved
- if ((pMouseData->mouse.XDelta != 0) || (pMouseData->mouse.YDelta !=0))
- {
- CursorDeviceMove(myMousePB.pCursorDeviceInfo, pMouseData->mouse.XDelta, pMouseData->mouse.YDelta);
- }
-
- // Update with the state of the buttons.
- pMouseData->mouse.buttons &= 0x07;
- changedbuttons = oldbuttons ^ pMouseData->mouse.buttons;
- if (changedbuttons)
- {
- CursorDeviceButtons(myMousePB.pCursorDeviceInfo, (short)pMouseData->mouse.buttons);
- }
- oldbuttons = pMouseData->mouse.buttons;
- }
-
- OSStatus USBHIDInstallInterrupt(HIDInterruptProcPtr HIDInterruptFunction, UInt32 refcon)
- {
- USBExpertStatus(myMousePB.deviceRef, "\pUSBHIDMouseModule: Demo Mode Disabled (interrupt service routine installed)", myMousePB.deviceRef);
- myMousePB.interruptRefcon = refcon;
- myMousePB.pSHIMInterruptRoutine = HIDInterruptFunction;
- return noErr;
- }
-
- OSStatus USBHIDPollDevice(void)
- {
- return kUSBInternalErr;
- }
-
- OSStatus USBHIDControlDevice(UInt32 theControlSelector, void * theControlData)
- {
- #pragma unused (theControlData)
-
- switch (theControlSelector)
- {
- case kHIDRemoveInterruptHandler:
- myMousePB.interruptRefcon = nil;
- myMousePB.pSavedInterruptRoutine = nil;
- myMousePB.pSHIMInterruptRoutine = nil;
- break;
-
- case kHIDEnableDemoMode:
- USBExpertStatus(myMousePB.deviceRef, "\pUSBHIDMouseModule: Demo Mode Enabled", myMousePB.deviceRef);
-
- if (myMousePB.pCursorDeviceInfo == 0)
- {
- myMousePB.pCursorDeviceInfo = &myMousePB.cursorDeviceInfo;
- CursorDeviceNewDevice(&myMousePB.pCursorDeviceInfo);
-
- CursorDeviceSetAcceleration(myMousePB.pCursorDeviceInfo, (Fixed)(1<<16));
-
- CursorDeviceSetButtons(myMousePB.pCursorDeviceInfo, 3); // should actually be set by reading
- // the HID descriptor, but lacking
- // a parser, we'll just force it
- // this way.
- CursorDeviceButtonOp(myMousePB.pCursorDeviceInfo, 0, kButtonSingleClick, 0L);
- CursorDeviceButtonOp(myMousePB.pCursorDeviceInfo, 1, kButtonSingleClick, 0L);
- CursorDeviceButtonOp(myMousePB.pCursorDeviceInfo, 2, kButtonSingleClick, 0L);
- CursorDeviceUnitsPerInch(myMousePB.pCursorDeviceInfo, (Fixed)(myMousePB.unitsPerInch));
- }
-
- myMousePB.pSavedInterruptRoutine = myMousePB.pSHIMInterruptRoutine;
- myMousePB.pSHIMInterruptRoutine = USBMouseIn;
- break;
-
- case kHIDDisableDemoMode:
- USBExpertStatus(myMousePB.deviceRef, "\pUSBHIDMouseModule: Demo Mode Disabled", myMousePB.deviceRef);
- if (myMousePB.pCursorDeviceInfo != 0)
- {
- CursorDeviceDisposeDevice(myMousePB.pCursorDeviceInfo);
- myMousePB.pCursorDeviceInfo = 0;
- }
- myMousePB.pSHIMInterruptRoutine = myMousePB.pSavedInterruptRoutine;
- break;
-
- default:
- return paramErr;
- }
- return noErr;
- }
-
-
-
- OSStatus USBHIDGetDeviceInfo(UInt32 theInfoSelector, void * theInfo)
- {
- HIDInterruptProcPtr * pHIDIntProcPtr;
- UInt32 * pUnits;
- UInt32 * pInterruptRefcon;
-
- switch (theInfoSelector)
- {
- case kHIDGetDeviceUnitsPerInch:
- pUnits = (UInt32*)theInfo;
- *pUnits = (UInt32)(myMousePB.unitsPerInch);
- break;
-
-
- case kHIDGetInterruptHandler:
- pHIDIntProcPtr = (HIDInterruptProcPtr *)theInfo;
- *pHIDIntProcPtr = myMousePB.pSHIMInterruptRoutine;
- break;
-
- case kHIDGetInterruptRefcon:
- pInterruptRefcon = (UInt32 *)theInfo;
- *pInterruptRefcon = myMousePB.interruptRefcon;
- break;
-
- default:
- return paramErr;
- }
- return noErr;
- }
-
- OSStatus USBHIDEnterPolledMode(void)
- {
- return unimpErr;
- }
-
- OSStatus USBHIDExitPolledMode(void)
- {
- return unimpErr;
- }
-
- void NotifyRegisteredHIDUser(UInt32 devicetype, UInt8 hidReport[])
- {
- #pragma unused (devicetype)
-
- USBHIDData theMouseData;
- SInt8 myXDelta, myYDelta;
-
- theMouseData.mouse.buttons = (UInt16)hidReport[0];
-
- myXDelta = (SInt8)hidReport[1];
- myYDelta = (SInt8)hidReport[2];
-
- theMouseData.mouse.XDelta = (SInt16)myXDelta;
- theMouseData.mouse.YDelta = (SInt16)myYDelta;
- if (myMousePB.pSHIMInterruptRoutine)
- {
- (*myMousePB.pSHIMInterruptRoutine)(myMousePB.interruptRefcon, (void *)&theMouseData);
- }
- }
-
- USBHIDModuleDispatchTable TheHIDModuleDispatchTable =
- {
- (UInt32)0,
- (USBHIDInstallInterruptProcPtr)USBHIDInstallInterrupt,
- (USBHIDPollDeviceProcPtr)USBHIDPollDevice,
- (USBHIDControlDeviceProcPtr)USBHIDControlDevice,
- (USBHIDGetDeviceInfoProcPtr)USBHIDGetDeviceInfo,
- (USBHIDEnterPolledModeProcPtr)USBHIDEnterPolledMode,
- (USBHIDExitPolledModeProcPtr)USBHIDExitPolledMode
- };
-
- CursorDevicePtr gUSBMouse;
- CursorDevice ourDevice;
-
-